
#ifndef LISTNODE_HPP_
#define LISTNODE_HPP_

/**
 * Template ListNode: elemento-de-lista
 * que aloja un puntero al dato de clase T
 * y un puntero al siguiente elemento-de-lista.
 */
template<class T> class ListNode {
private:
	T 			*datta;
	ListNode<T> *next;

public:

	/**
	 * Constructor de la clase ListNode<T>
	 * @param datta de clase T*.
	 */
	ListNode(T *datta){
		this->datta = datta;
		this->next = NULL;
	}

	/**
	 * Destructor de la clase ListNode<T>.
	 */
	virtual ~ListNode(){}

	/**
	 * Metodo setter del dato de clase T alojado
	 * en el nodo.
	 * @param datta de clase T*.
	 */
	void setDatta(T *datta){
		this->datta = datta;
	}

	/**
	 * Metodo getter del dato de clase T alojado
	 * en el nodo.
	 * @return Retorna un puntero al dato de clase T.
	 */
	T* getDatta(){
		return this->datta;
	}

	/**
	 * Metodo setter del siguiente elemento-de-lista del
	 * nodo.
	 * @param next de clase ListNode<T>*.
	 */
	void setNext(ListNode<T>* next){
		this->next = next;
	}

	/**
	 * Metodo getter del siguiente elemento-de-lista del
	 * del nodo.
	 * @return Retorna un puntero al siguiente nodo.
	 */
	ListNode<T>* getNext(){
		return this->next;
	}

	/**
	 * Chequea si el elemento this tiene un elemento
	 * siguiente.
	 * @return true si tiene un elemente siguiente.
	 * @return false en caso contrario.
	 */
	bool hasNext(){
		return (this->next != NULL);
	}
};

#endif /* LISTNODE_HPP_ */
